home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / cvt.arc / CVT.C next >
Encoding:
C/C++ Source or Header  |  1986-05-29  |  2.9 KB  |  118 lines

  1. /* CVT.c- Quick hex-decimal-octal conversion program
  2.  *   call with online argument, displays equivalents (including ASCII)
  3.  *   call alone for muliple query
  4.  *  c.1986 w.borys
  5.  */
  6. #include "std.h"
  7. COUNT base;
  8. main(ac,av)
  9.     COUNT ac;
  10.     TEXT *av[];
  11. {
  12.     TEXT *p,inp[25];
  13.     ULONG ul, val;
  14.     COUNT single,i;    
  15.     TEXT *cptr;
  16.     static TEXT *hlp[] = 
  17.              {"\n\nCVT program: quick hex-octal-decimal conversion\n",
  18.                    " Input number in any format: \n",
  19.                    "   0nnn  or Onnn:  octal input format\n",
  20.                    "   0xnnn or Hnnn:  hex   input format\n",
  21.                    "   nnn or Dnnn:  decimal input format\n",
  22.                    "Call with parameter for single shot mode\n",
  23.                  " or without parameter for query mode.  c1986 borysoft\n\n"};
  24.     static char *ct[]={
  25.                 "nul","soh","stx","etx","eot","enq","ack","bel",
  26.                 "bs","ht","lf","vt","ff","cr","so","si","dle",
  27.                 "dc1","dc2","dc3","dc4","nak","syn","etb","can",
  28.                 "em","sub","esc","fs","gs","rs","us"," "};
  29.  
  30.   single = 0;
  31.   if (ac == 1)
  32.     {
  33.     for (i=0;i<7;i++)
  34.         printf(hlp[i]);
  35.     }
  36.   FOREVER 
  37.     {
  38.     if (ac == 2)
  39.         {
  40.         single=1;
  41.         strcpy(inp,av[1]);
  42.         }
  43.     else
  44.         {
  45.         printf("Number to convert (Q=quit):");putchar(-1);
  46.         scanf("%s",inp);
  47.         if ((*inp | 040) == 'q')
  48.             exit(0);
  49.         }
  50.     ac = 0;
  51.     for (p=inp; *p != EOS; p++)
  52.         *p = toupper(*p);
  53.     p = inp;
  54.     while (*p == ' ')
  55.         p++;
  56.     base =10;
  57.     if (*p == '0')
  58.         base = 8, p++;
  59.     if (base == 8 && *p == 'X')
  60.         base = 16, p++;
  61.     if (*p == 'D')
  62.         base = 10, p++;
  63.     if (*p == 'O')
  64.         base = 8, p++;
  65.     if (*p == 'H')
  66.         base = 16, p++;
  67.  
  68.     val = 0;
  69.     for (;*p != EOS;p++)
  70.         {
  71.         if ((ul = valdig(*p)) == 99)
  72.             break;
  73.         else
  74.             val = (LONG) base * val + ul;
  75.         }
  76.  
  77.     if (ul==99)
  78.         printf("\07 BAD CONVERSION\n");
  79.  
  80.     if (val < 32)
  81.         cptr = ct[val];
  82.  
  83.     printf(" CVT(%s)    Decimal: %U    Octal: %O    Hex: %X",
  84.         inp,val,val,val);
  85.     if (val < 255)
  86.         printf("    Char: `%c'",val);
  87.     if (val < 32)
  88.         printf(" (%s)",cptr);
  89.     printf("\n");
  90.  
  91.     if (single)
  92.         exit(0);
  93.     }
  94. }
  95. COUNT valdig(dig)
  96.     TEXT dig;
  97.     {
  98.     COUNT n;
  99.  
  100.     n = 99; 
  101.     if (base==10)
  102.         if (dig >= '0' && dig <= '9')
  103.             n = dig - '0';
  104.  
  105.     if (base==8)
  106.         if (dig >= '0' && dig <= '7')
  107.             n = dig - '0';
  108.  
  109.     if (base==16)
  110.         {
  111.         if (dig >= '0' && dig <= '9')
  112.             n = dig - '0';
  113.         if (dig >= 'A' && dig <= 'F')
  114.             n = dig - 55;
  115.         }
  116.     return(n);
  117.     }
  118.